//
//  RevanOAthViewController.swift
//  weibo_swift
//
//  Created by 紫荆秋雪 on 17/1/3.
//  Copyright © 2017年 紫荆秋雪. All rights reserved.
//

import UIKit
import SVProgressHUD

class RevanOAthViewController: UIViewController {
    
    /// 懒加载webView
    private lazy var webView = UIWebView()
    
    // 重写loadView，只会在进来的时候加载一次
    override func loadView() {
        // 替换控制器的View
        view = webView
        // 设置代理
        webView.delegate = self
        // 设置背景颜色
        view.backgroundColor = UIColor.white
        //webView禁止滚动
        webView.scrollView.isScrollEnabled = false
        // 设置标题
        title = "新浪微博登录界面"
        // 添加返回按钮
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", target: self, action: #selector(colse), isBack: true)
        // 自动填充“账号”、“密码”按钮
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", target: self, action: #selector(autoFill))
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // 拼接授权页面
        let urlString = "https://api.weibo.com/oauth2/authorize?client_id=\(RevanAppKey)&redirect_uri=\(RevanRedirectURI)"
        // 1、URL 确定要访问的资源
        guard let url = URL(string: urlString) else {
            return
        }
        // 2、建立请求
        let request = URLRequest(url: url)
        // 3、加载请求
        webView.loadRequest(request)
    }
    
    // MARK: - 退下登录按钮
    @objc func colse() {
        //取消网络加载指示器
        SVProgressHUD.dismiss()
        dismiss(animated: true, completion: nil)
    }
    // 自动填充 账号、密码
    /// 自动填充 - webView 的注入，直接通过 js 修改 '本地浏览器中'缓存的页面内容
    /// 点击登录按钮，执行submit() 将本地数据提交给服务器
    @objc private func autoFill() {
        print("自动填充")
        // 准备 js
        let js = "document.getElementById('userId').value = '18268802972';" + "document.getElementById('passwd').value = 'd15213145920';"
        // 让 webView 执行js
        webView.stringByEvaluatingJavaScript(from: js)
    }
}

// MARK: - UIWebViewDelegate代理方法
extension RevanOAthViewController: UIWebViewDelegate {
    /// webView 将要加载请求
    ///
    /// - Parameters:
    ///   - webView: wevView
    ///   - request: 要加载的请求
    ///   - navigationType: 导航类型
    /// - Returns: 是否加载 request
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        // 确认思路
        // 1、如果请求地址包含 http://baidu.com 不加载页面 / 否则加载页面
        if request.url?.absoluteString.hasPrefix(RevanRedirectURI) == false {
            return true
        }
        print("加载请求 -- \(request.url?.absoluteString)")
        print("加载请求 -- \(request.url?.query)")
        // 2.从http://baidu.com 回调地址的 ‘查询字符串’中查找 ‘code=’
        // 如果有，授权成功，否则，授权失败
        if request.url?.query?.hasPrefix("code=") == false {
            //授权失败
            print("取消授权")
            // 退下授权页面
            colse()
            return false
        }
        // 获取授权码
        let code = request.url?.query?.substring(from: "code=".endIndex) ?? ""
        
        print("获取授权码。。。\(code)")
        // 通过授权码code，来获取accessToken
        RevanNetworkManager.shared.loadAccessToken(code: code) { (isSuccess) in
            
            if !isSuccess {
                SVProgressHUD.showInfo(withStatus: "网络请求失败")
            } else {
                //SVProgressHUD.showInfo(withStatus: "网络请求成功")
                // 发出通知
                RevanNotificationCenter.post(name: NSNotification.Name(rawValue: RevanUserShouldLoginNotification), object: nil)
                // 退下登录界面
                self.colse()
            }
        }
        return false//禁止回调
    }
    
    // MARK: - 开始加载webView
    func webViewDidStartLoad(_ webView: UIWebView) {
        // 显示加载状态
        SVProgressHUD.show()
    }
    
    // MARK: - 加载webView完成
    func webViewDidFinishLoad(_ webView: UIWebView) {
        // 取消加载状态
        SVProgressHUD.dismiss()
    }
}


















